package models;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import panels.Panel1;
import panels.Panel2;
import panels.Panel3;
public class GUI {
public JFrame frame;
JPanel panel;
CardLayout card;
JTable table;
JTable table1;
Bank bank = new Bank();
public GUI() {
initialize();
}
public void initialize() {
frame = new JFrame();
frame.setSize(640, 480);
card = new CardLayout();
panel = new JPanel();
panel.setLayout(card);
Panel1 p1 = new Panel1();
Panel2 p2 = new Panel2();
Panel3 p3 = new Panel3();
panel.add(p1, "Login");
panel.add(p2, "Admin");
panel.add(p3, "Accounts");
// THE CLIENTS TABLE
DefaultTableModel model = new DefaultTableModel();
table = new JTable(model);
table.setBounds(165, 87, 100, 100);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setBounds(40, 55, 558, 241);
model.addColumn("Name");
model.addColumn("Age");
model.addColumn("Accounts");
p2.add(scrollPane);
// THE ACCOUNTS TABLE
DefaultTableModel model1 = new DefaultTableModel();
table1 = new JTable(model1);
table1.setBounds(165, 87, 100, 100);
JScrollPane scrollPane1 = new JScrollPane(table1);
scrollPane1.setBounds(40, 55, 558, 211);
model1.addColumn("Name");
model1.addColumn("Type");
model1.addColumn("Funds");
model1.addColumn("ID");
p3.add(scrollPane1);
frame.getContentPane().add(panel);
//BUTTON EVENTS
p1.login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
String usr = p1.userField.getText();
String pass = new String(p1.passField.getPassword());
Properties config = new Properties();
InputStream file;
try {
file = new FileInputStream("res/data.properties");
config.load(file);
if (usr.toString().equals("admin")) {
String adminPassword = config.getProperty("username." + usr.toString());
if (adminPassword.equals(pass.toString())) {
card.show(panel, "Admin");
p1.error.setVisible(false);
p1.passField.setText(null);
p1.userField.setText(null);
} else {
p1.error.setVisible(true);
p1.passField.setText(null);
p1.userField.setText(null);
}
}
file.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
p2.userLogout.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
card.show(panel, "Login");
}
});
p2.btnAddClient.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
String name = p2.nameField.getText();
String age = p2.ageField.getText();
Person p = new Person(name,Integer.parseInt(age));
bank.addPerson(p);
model.addRow(new Object[] { p.getName(), p.getAge(), p.getNrOfAccounts() });
p2.nameField.setText(null);
p2.ageField.setText(null);
}
});
p2.btnRemoveClient.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
int index = table.getSelectedRow();
String name = table.getValueAt(index, 0).toString();
model.removeRow(index);
Iterator<Map.Entry<Person, ArrayList<Account>>> iterator = bank.data.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Person, ArrayList<Account>> aux = iterator.next();
if(aux.getKey().getName().equals(name)){
bank.removePerson(aux.getKey());
break;
}
}
}
});
p2.btnRefresh.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
int rowCount = model.getRowCount();
for(int i=rowCount-1;i>=0;i--){
model.removeRow(i);
}
Iterator<Map.Entry<Person, ArrayList<Account>>> iterator = bank.data.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Person, ArrayList<Account>> aux = iterator.next();
model.addRow(new Object[] { aux.getKey().getName(), aux.getKey().getAge(), aux.getKey().getNrOfAccounts() });
}
}
});
p2.accounts.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
card.show(panel, "Accounts");
}
});
p3.userLogout.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
card.show(panel, "Login");
}
});
p3.clients.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
card.show(panel, "Admin");
}
});
p3.btnRemoveAccount.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
int index = table1.getSelectedRow();
String id = table1.getValueAt(index, 3).toString();
model1.removeRow(index);
Iterator<Map.Entry<Person, ArrayList<Account>>> iterator = bank.data.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Person, ArrayList<Account>> aux = iterator.next();
Iterator<Account> itAccount = aux.getValue().iterator();
while(itAccount.hasNext()){
Account a = itAccount.next();
if(a.getAccountID()==Integer.parseInt(id)){
bank.removeHolderAccount(aux.getKey(), a);
}
}
}
}
});
p3.btnAddAccount.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
String name = p3.nameField.getText();
String type = p3.typeField.getText();
String funds = p3.fundsField.getText();
Iterator<Map.Entry<Person, ArrayList<Account>>> iterator = bank.data.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Person, ArrayList<Account>> aux = iterator.next();
if(aux.getKey().getName().equals(name)){
if(type.equals("Savings")){
SavingAccount account = new SavingAccount(Double.parseDouble(funds));
bank.addHolderAccount(aux.getKey(), account);
Integer id1 = account.getAccountID();
model1.addRow(new Object[] { aux.getKey().getName(), type, funds,id1.toString() });
p3.nameField.setText(null);
p3.typeField.setText(null);
p3.fundsField.setText(null);
}
if(type.equals("Spending")){
SpendingAccount account = new SpendingAccount(Double.parseDouble(funds));
bank.addHolderAccount(aux.getKey(), account);
Integer id = account.getAccountID();
model1.addRow(new Object[] { aux.getKey().getName(), type, funds,id.toString()});
p3.nameField.setText(null);
p3.typeField.setText(null);
p3.fundsField.setText(null);
}
}
}
}
});
p3.btnWithdraw.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
int index = table1.getSelectedRow();
String id = table1.getValueAt(index, 3).toString();
String withdrawAmount = p3.withdrawField.getText();
Iterator<Map.Entry<Person, ArrayList<Account>>> iterator = bank.data.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Person, ArrayList<Account>> aux = iterator.next();
Iterator<Account> itAccount = aux.getValue().iterator();
while(itAccount.hasNext()){
Account a = itAccount.next();
if(a.getAccountID()==Integer.parseInt(id)){
double amount=a.withdrawMoney(Double.parseDouble(withdrawAmount));
table1.setValueAt(amount, index, 2);
}
}
}
}
});
p3.btnDeposit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
int index = table1.getSelectedRow();
String id = table1.getValueAt(index, 3).toString();
String depositAmount = p3.depositField.getText();
Iterator<Map.Entry<Person, ArrayList<Account>>> iterator = bank.data.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Person, ArrayList<Account>> aux = iterator.next();
Iterator<Account> itAccount = aux.getValue().iterator();
while(itAccount.hasNext()){
Account a = itAccount.next();
if(a.getAccountID()==Integer.parseInt(id)){
double amount=a.depositMoney(Double.parseDouble(depositAmount));
table1.setValueAt(amount, index, 2);
}
}
}
}
});
}
}